package juego.unidades;

import juego.Atacante;
import juego.Defensor;
import juego.Posicion;
import juego.Posicionable;
import juego.Rect;


public abstract class Persona extends Posicionable implements Atacante, Defensor{

    //el rango es hasta donde puede visualizar
	private int rango;
	
	public Persona(int energia,Rect size,int rango){
		super(size,energia);
		this.rango=rango;
	}
	
	/**
	 * es implementado por las subclases
	 * segun el daño que cause 
	 * @return int
	 */
	public abstract int danio();
	
	
	public int getRango(){
		return this.rango;
	}


	/**
	 * @param Atacante
	 * resta la energia segun el daño del atacante
	 */
	public void teAtaca(Atacante a) {
			this.setEnergia(this.getEnergia()-a.danio());	
	}


    /**
     * calcula la distancia entre this  y la posicion del
     * defensor ,si esta dentro del rango de this retorna
     * true	
     * 
     * @param p
     * @return boolean
     */
	private boolean loVeo(Posicion p) {
		
		return this.getPosicion().calcularDistancia(p)<=this.getRango();
	}

	/**
	 * @param Defensor
	 *  si this esta en el rango(si lo ve) ataca al defensor
	 *  
	 */
	public void atacarA(Defensor d) {
		//casteando un atacante a persona ,ya que este tiene
	    //posicion..
		if(this.loVeo(((Posicionable)d).getPosicion())){
		    d.teAtaca(this);
		    
		}
	}
}
